package com.example.security.service;

import com.example.common.system.entity.LoginUser;
import com.example.common.util.security.SecurityUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.Set;

/**
 * @author chenjf
 * @Date 2022/9/21
 * @Description 自定义权限表达式【仿若依】
 */
@Service("ss")
public class PermissionExpression {

    //管理员权限标识
    private final String ADMIN_PERMISSION = "*:*:*";

    /**
     * 是否拥有该权限标识,每当请求访问过来时，拦截请求，验证用户是否拥有该权限
     *
     * @param permission
     * @return
     */
    public boolean hasPerm(String permission) {
        if (null == permission || "".equals(permission)) {
            //放行
            return false;
        }
        //获取当前登录用户
        LoginUser loginUser = SecurityUtil.getLoginUser();
        if (null == loginUser || CollectionUtils.isEmpty(loginUser.getPermissions())) {
            return false;
        }
        //验证是否拥有标识
        return hasPermissions(loginUser.getPermissions(), permission);
    }


    /**
     * 判断是否包含权限
     *
     * @param permissions 权限列表
     * @param permission  权限字符串
     * @return 用户是否具备某权限
     */
    private boolean hasPermissions(Set<String> permissions, String permission) {
        return permissions.contains(ADMIN_PERMISSION) || permissions.contains(StringUtils.trim(permission));
    }

}
